using Microsoft.EntityFrameworkCore;
using OrchardCore.Environment.Shell;
using OrchardCore.Data;

namespace OrchardCore.Data.EFCore;

/// <summary>
/// OrchardCore DbContext接口
/// 定义OrchardCore应用程序中DbContext的基本契约
/// </summary>
/// <remarks>
/// 主要功能：
/// - 定义DbContext的基本接口
/// - 提供多租户支持
/// - 支持配置和初始化
/// - 提供事务管理
/// 
/// 设计原因：
/// - 遵循依赖倒置原则
/// - 支持多种DbContext实现
/// - 便于单元测试
/// </remarks>
public interface IOrchardCoreDbContext
{
    /// <summary>
    /// 获取数据库连接字符串
    /// </summary>
    string ConnectionString { get; }

    /// <summary>
    /// 获取数据库提供程序名称
    /// </summary>
    string ProviderName { get; }

    /// <summary>
    /// 获取租户名称
    /// </summary>
    string TenantName { get; }

    /// <summary>
    /// 获取表前缀
    /// </summary>
    string TablePrefix { get; }

    /// <summary>
    /// 获取架构名称
    /// </summary>
    string Schema { get; }

    /// <summary>
    /// 配置DbContext
    /// </summary>
    /// <param name="optionsBuilder">DbContext选项构建器</param>
    void Configure(DbContextOptionsBuilder optionsBuilder);

    /// <summary>
    /// 初始化DbContext
    /// </summary>
    Task InitializeAsync();

    /// <summary>
    /// 确保数据库已创建
    /// </summary>
    Task EnsureCreatedAsync();

    /// <summary>
    /// 应用迁移
    /// </summary>
    Task MigrateAsync();
} 